A computer system typically includes a motherboard with a socket. The socket and associated support circuitry/devices on the motherboard is designed to supply power and signal input/output to a CPU having a set of predefined operating parameters for proper operation with or communication with the socket and other devices of the computer as is well known in the art.
It is sometimes desirable to provide additional functionality/capability or performance to a computer system and thus, motherboards are provided with means for receiving additional devices, typically by way of “expansion slots.” Devices added to the motherboard by these expansion slots communicate via a standard bus. The expansion slots and bus are designed to receive and provide data transport of a wide array of devices, but have well-known design limitations.
One type of enhancement of a computer system involves the addition of a co-processor. The challenges of using a co-processor with an existing computer system include the provision of physical space to add the co-processor, providing power to the co-processor, providing memory for the co-processor, dissipating the additional heat generated by the co-processor and providing a high-speed pipe for information to and from the co-processor.
Without replacing the socket, which would require replacing the motherboard, the CPU cannot be presently changed to one for which the socket was not designed, which might be desirable in providing features, functionality, performance and capabilities for which the system was not originally designed.
Presently, neither of these upgrades or performance enhancements may be performed without redesigning parts of or the entire system or accepting, in the case of a co-processor, the design limitations of known expansion options.
Present day computer system housings tend to be designed with small footprints in order to reduce the space needed for the computer enclosure. Similarly, space is not easily found on or around present motherboards, which tends to be designed in a compact form, not just to save space, but also to minimize distances that signals have to travel in order to maximize speed of the system. Increasing the density of the system tends to increase the difficulty of removing the heat generated by components of the system. Providing memory, power and a high-speed bus to and from the co-processor, without replacing the motherboard or substantial redesign, is an additional design challenge.
As a result, present day computer systems incorporating present CPUs or such a co-processor are designed from the beginning to incorporate the CPU or co-processor or to tolerate addition of the co-processor which leads to the above-noted design compromises, including being provided via a PCI board, for example.
FPGA accelerators and the like, including counterparts therefore, e.g., application-specific integrated circuits (ASIC), are well known in the high-performance computing field. Nallatech, (see www.nallatech.com) is an example of several vendors that offer FPGA accelerator boards that can be plugged into standard computer systems. These boards are built to conform to industry standard I/O (Input/Output) interfaces for plug-in boards. Examples of such industry standards include: PCI (Peripheral Component Interconnect) and its derivatives such as PCI-X and PCI-Express. Some computer system vendors, for example, Cray, Inc., (see www.cray.com) offer built-in FPGA co-processors interfaced via proprietary interfaces to the CPU.
FPGAs can provide significant performance boosts to conventional processor based computing systems. In the same way that software can be downloaded into a CPU (processor) to perform specific tasks, “firmware” or software that is embedded in a hardware device, can be downloaded into an FPGA to perform specific tasks. A key difference lies in the difference between software and FPGA firmware. Software includes a set of pre-defined instructions that can run on a pre-defined hardware engine (a CPU). On the other hand, FPGA firmware can define a custom hardware engine and provide a set of custom instructions that can run on this engine. This flexibility allows the FPGA to implement optimized hardware engines to implement specific tasks, offering the potential to greatly accelerate CPU functions and the overall performance of the computer system.
Typical FPGA accelerator boards include the following basic components: a FPGA, FPGA firmware memory, data memory, a high-speed interface to one or more CPU and FPGA support circuitry, i.e., power regulators and clock generators. The high-speed interface to the CPU is typically an industry standard I/O interface like PCI. In the prior art, all of the above components are integrated onto a standard PCI, or other, plug-in board. As noted above, one of the engineering issues in designing and building such a plug-in board is related to the power supply and whether the I/O interface (PCI or other) can supply the correct power levels (voltage and current) for the FPGA board. Another engineering issue is related to physical space and whether the computer system chassis can accommodate the plug-in board. Yet another issue is related to heat dissipation and whether the computer system chassis can provide adequate airflow to cool the FPGA board and other necessary hardware. These issues conspire to restrict the usage of FPGA boards to the class of computer systems that have the correct capabilities. The present invention is a solution that enables FPGAs to be used in a wider range of computer systems, including high-density blade systems that may not have provisions for expansion slots.
There is a demand for incorporating co-processors and different CPUs into existing computer systems that addresses the above shortcomings. The present invention satisfies the demand.